// 这是购物车数据模块

export default {
	// 为当前模块开启命名空间
	namespaced: true,
	// 模块数据
	state: () => ({
		// 购物车数据
		cart: JSON.parse(uni.getStorageSync('cart') || '[]')
	}),
	// 模块的 mutations 方法
	mutations: {
		// 修改cart数据的方法
		addToCart(state, goods) {
			// 判断商品是否已经放入购物车，如果已经放入，只修改商品数量
			const result = state.cart.find(item => item.goods_id === goods.goods_id)
			if (result) { // 找到了
				result.goods_count += 1
			} else {
				state.cart.push(goods)
			}
			// console.log(state.cart)
			// 保存到本地
			this.commit('m_cart/saveToStorage')
		},
		// 更新购物车中商品的勾选状态
		updateGoodsState(state, goods) {
			console.log('要修改的商品', goods)
			// 找到要修改的商品
			const result = state.cart.find(item => item.goods_id === goods.goods_id)
			// 找到了就修改
			if (result) {
				result.goods_state = goods.goods_state
			}
			// 保存到本地
			this.commit('m_cart/saveToStorage')
		},
		// 更新购物车中商品的数量
		updateGoodsCount(state, goods) {
			// 找到要修改的商品
			const result = state.cart.find(item => item.goods_id === goods.goods_id)
			// 找到了就修改
			if (result) {
				result.goods_count = goods.goods_count
			}
			// 保存到本地
			this.commit('m_cart/saveToStorage')
		},

		// 更新购物车的选中状态
		updateAllGoodsState(state, newState) {
			// 更新数组中每一个元素的选中状态
			state.cart.forEach(item => item.goods_state = newState)
		},


		// 保存到本地
		// 将购物车中的数据持久化存储到本地
		saveToStorage(state) {
			uni.setStorageSync('cart', JSON.stringify(state.cart))
		}

	},
	// 模块的 getters 属性
	getters: {

		// 计算商品总数量
		total(state) {

			return state.cart.reduce((acc, item) => {
				// acc = acc+ item.goods_count
				return acc += item.goods_count
			}, 0)
			// 或者使用老办法
			// let c = 0
			// // 循环统计商品的数量， 累加到变量 c 中
			// state.cart.forEach(goods => c += goods.goods_count)
			// return c
		},

		// 已勾选商品
		// 数量总和
		checkedCount(state) {
			// 已勾选商品
			return state.cart.filter(item => item.goods_state)
				.reduce((acc, item) => acc + item.goods_count, 0)
		},
		// 已勾选商品
		// 价格总和
		checkedGoodsPrice(state) {
			// 已勾选商品
			return state.cart.filter(item => item.goods_state)
				.reduce((acc, item) => acc + (item.goods_count * item.goods_price), 0)
				.toFixed(2)
		},
		// 判断商品是否全部选中
		isFullCheck(state) {
			return state.cart.every(item => item.goods_state)
		}

	},

}
